Soru & Cevap

viewpager da her resim için bir activity başlatmak???

02.07.2016 - 04:33

Selam yapmaya çalıştığım uygulamada her fragment içinde bir adet viewpager bulunuyor.Bu viewpager içinde resimler soldan sağa sağdan sola kayıyor hiç bir sıkıntı yok ama ben resme tıklandığı zaman zoom da yapabileceğim yeni bir popup ya da sayfa açılsın istiyorum bunu nasıl yapabilirim acaba?

Adapter.java aşağıdaki gibi

 

 


public class Adapter extends PagerAdapter {

private Activity _activity;

Context context;

LayoutInflater layoutinflater;

public Adapter(Context context) {

context = context;

layoutinflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

int[] mResources = { R.drawable.img1, R.drawable.img2, };

@Override

public int getCount() { return mResources.length;

}

@Override

public boolean isViewFromObject(View view, Object object) { return view == object;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

View itemView = layoutinflater.inflate(R.page_1, container, false); ImageView imageView = (ImageView) itemView.findViewById(R.id.resim); imageView.setImageResource(mResources[position]);

container.addView(itemView); return itemView;

}

@Override

public void destroyItem(View container, int position, Object object) {

((ViewPager) container).removeView((View) object); }

}
 

28 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user ardakazanc
ardakazanc
04.07.2016 - 03:54
import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.util.FloatMath;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class ZoomInZoomOut extends Activity implements OnTouchListener 
{
    private static final String TAG = "Touch";
    @SuppressWarnings("unused")
    private static final float MIN_ZOOM = 1f,MAX_ZOOM = 1f;

    // These matrices will be used to scale points of the image
    Matrix matrix = new Matrix();
    Matrix savedMatrix = new Matrix();

    // The 3 states (events) which the user is trying to perform
    static final int NONE = 0;
    static final int DRAG = 1;
    static final int ZOOM = 2;
    int mode = NONE;

    // these PointF objects are used to record the point(s) the user is touching
    PointF start = new PointF();
    PointF mid = new PointF();
    float oldDist = 1f;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView view = (ImageView) findViewById(R.id.imageView);
        view.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) 
    {
        ImageView view = (ImageView) v;
        view.setScaleType(ImageView.ScaleType.MATRIX);
        float scale;

        dumpEvent(event);
        // Handle touch events here...

        switch (event.getAction() & MotionEvent.ACTION_MASK) 
        {
            case MotionEvent.ACTION_DOWN:   // first finger down only
                                                savedMatrix.set(matrix);
                                                start.set(event.getX(), event.getY());
                                                Log.d(TAG, "mode=DRAG"); // write to LogCat
                                                mode = DRAG;
                                                break;

            case MotionEvent.ACTION_UP: // first finger lifted

            case MotionEvent.ACTION_POINTER_UP: // second finger lifted

                                                mode = NONE;
                                                Log.d(TAG, "mode=NONE");
                                                break;

            case MotionEvent.ACTION_POINTER_DOWN: // first and second finger down

                                                oldDist = spacing(event);
                                                Log.d(TAG, "oldDist=" + oldDist);
                                                if (oldDist > 5f) {
                                                    savedMatrix.set(matrix);
                                                    midPoint(mid, event);
                                                    mode = ZOOM;
                                                    Log.d(TAG, "mode=ZOOM");
                                                }
                                                break;

            case MotionEvent.ACTION_MOVE:

                                                if (mode == DRAG) 
                                                { 
                                                    matrix.set(savedMatrix);
                                                    matrix.postTranslate(event.getX() - start.x, event.getY() - start.y); // create the transformation in the matrix  of points
                                                } 
                                                else if (mode == ZOOM) 
                                                { 
                                                    // pinch zooming
                                                    float newDist = spacing(event);
                                                    Log.d(TAG, "newDist=" + newDist);
                                                    if (newDist > 5f) 
                                                    {
                                                        matrix.set(savedMatrix);
                                                        scale = newDist / oldDist; // setting the scaling of the
                                                                                    // matrix...if scale > 1 means
                                                                                    // zoom in...if scale < 1 means
                                                                                    // zoom out
                                                        matrix.postScale(scale, scale, mid.x, mid.y);
                                                    }
                                                }
                                                break;
        }

        view.setImageMatrix(matrix); // display the transformation on screen

        return true; // indicate event was handled
    }

    /*
     * --------------------------------------------------------------------------
     * Method: spacing Parameters: MotionEvent Returns: float Description:
     * checks the spacing between the two fingers on touch
     * ----------------------------------------------------
     */

    private float spacing(MotionEvent event) 
    {
        float x = event.getX(0) - event.getX(1);
        float y = event.getY(0) - event.getY(1);
        return FloatMath.sqrt(x * x + y * y);
    }

    /*
     * --------------------------------------------------------------------------
     * Method: midPoint Parameters: PointF object, MotionEvent Returns: void
     * Description: calculates the midpoint between the two fingers
     * ------------------------------------------------------------
     */

    private void midPoint(PointF point, MotionEvent event) 
    {
        float x = event.getX(0) + event.getX(1);
        float y = event.getY(0) + event.getY(1);
        point.set(x / 2, y / 2);
    }

    /** Show an event in the LogCat view, for debugging */
    private void dumpEvent(MotionEvent event) 
    {
        String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE","POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" };
        StringBuilder sb = new StringBuilder();
        int action = event.getAction();
        int actionCode = action & MotionEvent.ACTION_MASK;
        sb.append("event ACTION_").append(names[actionCode]);

        if (actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_POINTER_UP) 
        {
            sb.append("(pid ").append(action >> MotionEvent.ACTION_POINTER_ID_SHIFT);
            sb.append(")");
        }

        sb.append("[");
        for (int i = 0; i < event.getPointerCount(); i++) 
        {
            sb.append("#").append(i);
            sb.append("(pid ").append(event.getPointerId(i));
            sb.append(")=").append((int) event.getX(i));
            sb.append(",").append((int) event.getY(i));
            if (i + 1 < event.getPointerCount())
                sb.append(";");
        }

        sb.append("]");
        Log.d("Touch Events ---------", sb.toString());
    }
}

Serdar'ın yorumu üzerine , ek olarak imageview'lara zoom olayını bu şekilde ele alabilirsin.
Kaynak : http://stackoverflow.com/questions/6650398/android-imageview-zoom-in-and-zoom-out

picture-57989-1451678910.jpg
serdarşen
03.07.2016 - 12:20

Merhaba Murat, bunu için imageView'e instantiateItem metodu içerisinde clicklistener tanımlayabilirsin. Aşağıdaki kodu bir dene istersen. hangi resme tıkladığını bilebilmek için de imageView setTag, getTag kavramlarını araştırabilirsin. Olmazsa söyle.

@Override

public Object instantiateItem(ViewGroup container, int position) {

    View itemView = layoutinflater.inflate(R.page_1, container, false); 
    ImageView imageView = (ImageView) itemView.findViewById(R.id.resim); 
    imageView.setImageResource(mResources[position]);
    imageView.setOnClickListener(new View.OnClickListener() {
 
             @Override
             public void onClick(View v) {
             
                Log.i("Adaptor", "imageView tıklandı");
             
             }
    });

    container.addView(itemView); return itemView;
}

 

Murat
03.07.2016 - 05:23
peki bunun yerine imageviewdaki resimlere zoom nasıl ekleyebılırım?